home *** CD-ROM | disk | FTP | other *** search
/ Tech Win 1999 February / TECH Win 02-1999 Disc A.iso / ols / lzh / adminsd.lzh / SDOWNDLG.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1998-09-18  |  5.3 KB  |  225 lines

  1. // SDownDlg.cpp : インプリメンテーション ファイル
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "SDown.h"
  6. #include "SDownDlg.h"
  7.  
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #undef THIS_FILE
  11. static char THIS_FILE[] = __FILE__;
  12. #endif
  13.  
  14. char cdmsg[] = _T("last %d sec.");
  15.  
  16. /////////////////////////////////////////////////////////////////////////////
  17. // アプリケーションのバージョン情報で使われている CAboutDlg ダイアログ
  18.  
  19. class CAboutDlg : public CDialog
  20. {
  21. public:
  22.     CAboutDlg();
  23.  
  24. // ダイアログ データ
  25.     //{{AFX_DATA(CAboutDlg)
  26.     enum { IDD = IDD_ABOUTBOX };
  27.     //}}AFX_DATA
  28.  
  29.     // ClassWizard は仮想関数のオーバーライドを生成します
  30.     //{{AFX_VIRTUAL(CAboutDlg)
  31.     protected:
  32.     virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV のサポート
  33.     //}}AFX_VIRTUAL
  34.  
  35. // インプリメンテーション
  36. protected:
  37.     //{{AFX_MSG(CAboutDlg)
  38.     //}}AFX_MSG
  39.     DECLARE_MESSAGE_MAP()
  40. };
  41.  
  42. CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
  43. {
  44.     //{{AFX_DATA_INIT(CAboutDlg)
  45.     //}}AFX_DATA_INIT
  46. }
  47.  
  48. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  49. {
  50.     CDialog::DoDataExchange(pDX);
  51.     //{{AFX_DATA_MAP(CAboutDlg)
  52.     //}}AFX_DATA_MAP
  53. }
  54.  
  55. BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
  56.     //{{AFX_MSG_MAP(CAboutDlg)
  57.         // メッセージ ハンドラがありません。
  58.     //}}AFX_MSG_MAP
  59. END_MESSAGE_MAP()
  60.  
  61. /////////////////////////////////////////////////////////////////////////////
  62. // CSDownDlg ダイアログ
  63.  
  64. CSDownDlg::CSDownDlg(CWnd* pParent /*=NULL*/)
  65.     : CDialog(CSDownDlg::IDD, pParent)
  66. {
  67.     //{{AFX_DATA_INIT(CSDownDlg)
  68.         // メモ: この位置に ClassWizard によってメンバの初期化が追加されます。
  69.     //}}AFX_DATA_INIT
  70.     // メモ: LoadIcon は Win32 の DestroyIcon のサブシーケンスを要求しません。
  71.     m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  72. }
  73.  
  74. void CSDownDlg::DoDataExchange(CDataExchange* pDX)
  75. {
  76.     CDialog::DoDataExchange(pDX);
  77.     //{{AFX_DATA_MAP(CSDownDlg)
  78.     DDX_Control(pDX, IDC_PROGRESS, m_prgbar);
  79.     DDX_Control(pDX, IDC_STATUS, m_ctrStatusDisp);
  80.     DDX_Control(pDX, IDC_COUNTDOWN, m_ctrCountDisp);
  81.     //}}AFX_DATA_MAP
  82. }
  83.  
  84. BEGIN_MESSAGE_MAP(CSDownDlg, CDialog)
  85.     //{{AFX_MSG_MAP(CSDownDlg)
  86.     ON_WM_SYSCOMMAND()
  87.     ON_WM_PAINT()
  88.     ON_WM_QUERYDRAGICON()
  89.     ON_WM_TIMER()
  90.     //}}AFX_MSG_MAP
  91. END_MESSAGE_MAP()
  92.  
  93. /////////////////////////////////////////////////////////////////////////////
  94. // CSDownDlg メッセージ ハンドラ
  95.  
  96. BOOL CSDownDlg::OnInitDialog()
  97. {
  98.     CDialog::OnInitDialog();
  99.  
  100.     // "バージョン情報..." メニュー項目をシステム メニューへ追加します。
  101.  
  102.     // IDM_ABOUTBOX はコマンド メニューの範囲でなければなりません。
  103.     ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  104.     ASSERT(IDM_ABOUTBOX < 0xF000);
  105.  
  106.     CMenu* pSysMenu = GetSystemMenu(FALSE);
  107.     if (pSysMenu != NULL)
  108.     {
  109.         CString strAboutMenu;
  110.         strAboutMenu.LoadString(IDS_ABOUTBOX);
  111.         if (!strAboutMenu.IsEmpty())
  112.         {
  113.             pSysMenu->AppendMenu(MF_SEPARATOR);
  114.             pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  115.         }
  116.     }
  117.  
  118.     // このダイアログ用のアイコンを設定します。フレームワークはアプリケーションのメイン
  119.     // ウィンドウがダイアログでない時は自動的に設定しません。
  120.     SetIcon(m_hIcon, TRUE);            // 大きいアイコンを設定
  121.     SetIcon(m_hIcon, FALSE);        // 小さいアイコンを設定
  122.     
  123.     // TODO: 特別な初期化を行う時はこの場所に追加してください。
  124.     SetTimer( 1, 1000, NULL );
  125.  
  126.     m_prgbar.SetRange( 0, m_nTime );
  127.     m_prgbar.SetPos( m_nTime );
  128.  
  129.  
  130.     CString disp;
  131.     if( m_nOption & EWX_FORCE )
  132.         disp = _T("強制");
  133.     if( m_nOption & EWX_POWEROFF )
  134.         disp += _T("電源オフ");
  135.     if( m_nOption & EWX_SHUTDOWN )
  136.         disp += _T("システム終了");
  137.     if( m_nOption & EWX_REBOOT )
  138.         disp += _T("再起動");
  139.  
  140.     disp += _T("を行います。");
  141.     m_ctrStatusDisp.SetWindowText( disp );
  142.  
  143.     disp.Format( cdmsg, m_nTime );
  144.     m_ctrCountDisp.SetWindowText( disp );
  145.  
  146.     SetWindowPos( &wndTopMost,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE );
  147.  
  148.     return TRUE;  // TRUE を返すとコントロールに設定したフォーカスは失われません。
  149. }
  150.  
  151. void CSDownDlg::OnSysCommand(UINT nID, LPARAM lParam)
  152. {
  153.     if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  154.     {
  155.         CAboutDlg dlgAbout;
  156.         dlgAbout.DoModal();
  157.     }
  158.     else
  159.     {
  160.         CDialog::OnSysCommand(nID, lParam);
  161.     }
  162. }
  163.  
  164. // もしダイアログボックスに最小化ボタンを追加するならば、アイコンを描画する
  165. // コードを以下に記述する必要があります。MFC アプリケーションは document/view
  166. // モデルを使っているので、この処理はフレームワークにより自動的に処理されます。
  167.  
  168. void CSDownDlg::OnPaint() 
  169. {
  170.     if (IsIconic())
  171.     {
  172.         CPaintDC dc(this); // 描画用のデバイス コンテキスト
  173.  
  174.         SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
  175.  
  176.         // クライアントの矩形領域内の中央
  177.         int cxIcon = GetSystemMetrics(SM_CXICON);
  178.         int cyIcon = GetSystemMetrics(SM_CYICON);
  179.         CRect rect;
  180.         GetClientRect(&rect);
  181.         int x = (rect.Width() - cxIcon + 1) / 2;
  182.         int y = (rect.Height() - cyIcon + 1) / 2;
  183.  
  184.         // アイコンを描画します。
  185.         dc.DrawIcon(x, y, m_hIcon);
  186.     }
  187.     else
  188.     {
  189.         CDialog::OnPaint();
  190.     }
  191. }
  192.  
  193. // システムは、ユーザーが最小化ウィンドウをドラッグしている間、
  194. // カーソルを表示するためにここを呼び出します。
  195. HCURSOR CSDownDlg::OnQueryDragIcon()
  196. {
  197.     return (HCURSOR) m_hIcon;
  198. }
  199.  
  200. void CSDownDlg::OnTimer(UINT nIDEvent) 
  201. {
  202.     // todo:
  203.     char disp[255];
  204.     wsprintf( disp, cdmsg, m_nTime );
  205.     m_ctrCountDisp.SetWindowText( disp );
  206.     m_prgbar.SetPos( m_nTime );
  207.  
  208.     if( --m_nTime < 0)
  209.     {
  210.         KillTimer( 1 );
  211.         CDialog::OnOK();
  212.     }
  213.     else
  214.     {
  215.     }
  216.  
  217.     
  218.     CDialog::OnTimer(nIDEvent);
  219. }
  220.  
  221. void CSDownDlg::OnOK() 
  222. {
  223.     CDialog::OnOK();
  224. }
  225.